#include "parametre.h"
#include "image.h"
#include <QFile>
#include <QList>

Parametre::Parametre()
{
    //Initialisation liste image
    this->listImage = QList<Image*>();

    //initialisation paramètres
    this->resultSize = QSize(800, 600);

    this->pictureSize = 100;

    this->pictureQuantity = 150;
    this->addAllPicture = true;

    this->pictureDistance = 67;

    this->paramAuto = resultSizeId;

    this->formatPictureSize = Pixel;
    this->formatResult = Pixel;

    this->forme = Cercle;

    this->animation = false;

    this->colorBordure = QColor(Qt::white);
    this->sizeBordure = 5;
}


/////////////////////////////
////////Constructeurs////////
/////////////////////////////

Parametre Parametre::operator=(Parametre const& p)
{
    this->listImage = p.listImage;
    return *this;
}

/////////////////////////////
////////Liste Image//////////
/////////////////////////////

/**
 *Getter de la liste d'image
 */
QList<Image *> Parametre::getListImage()
{
    return this->listImage;
}

/**
 *Setter de la liste d'image
 */
void Parametre::setListImage(QList<Image*> e)
{
    this->listImage = e;
}

/**
 *Ajoute une image a partir d'un fichier, retourne un string détaillant l'erreur survenue, string vide si aucune erreur.
 */
QString Parametre::addImage(Image *e)
{
    try
    {
        if (!imgExist(e))
        {
            //On ajoute l'image dans la liste
            this->listImage.append(e);
        }
        else
        {
            //L'image existe, on prévient l'utilisateur
            return QString("L'image est déja dans la liste.");
        }
    }
    catch(...)
    {
        return QString("Erreur inconnue.");
    }
    return QString();
}

/**
 *Vérifie si une image est déja enregistrée
 */
bool Parametre::imgExist(Image *pImage)
{
    Image *mImage;
    
    //Pour toutes les images dans la liste
    foreach(mImage, this->listImage)
    {
        //Si l'image est déja enregistrée
        if(*mImage == pImage)
            return true;
    }
    
    return false;
}

/**
 *On retire une image de la liste métier
 */
bool Parametre::removeImage(QString pImagePath)
{
    Image *mImage;
    
    //Pour toutes les images dans la liste
    foreach(mImage, this->listImage)
    {
        //Si l'image est trouvée
        if(mImage->getFilepath() == pImagePath)
        {
            //on la supprime et on prévien l'user
            this->listImage.removeOne(mImage);
            delete mImage;
            return true;
        }
    }
    //L'image n'a pas été trouvée dans la liste
    return false;
}

////////////////////////////
////////Paramètres//////////
////////////////////////////

//////////Setter////////////
void Parametre::setAutoParam(TypeParam typeParam)
{this->paramAuto = typeParam;}

void Parametre::setResultSize(QSize pResultSize)
{this->resultSize = pResultSize;}

void Parametre::setPictureSize(int pPictureSize)
{this->pictureSize = pPictureSize;}

void Parametre::setPictureQuantity(int pPictureQuantity)
{this->pictureQuantity = pPictureQuantity;}

void Parametre::setAddAllPicture(bool pAddAllPicture)
{this->addAllPicture = pAddAllPicture;}

void Parametre::setPictureDistance(int pPictureDistance)
{this->pictureDistance = pPictureDistance;}

void Parametre::setResultWidth(int pResultWidth)
{this->resultSize.setWidth(pResultWidth);}

void Parametre::setResultHeight(int pResultHeight)
{this->resultSize.setHeight(pResultHeight);}

void Parametre::setFormatResult(Format pFormatResult)
{this->formatResult = pFormatResult;}

void Parametre::setFormatPictureSize(Format pFormatPictureSize)
{this->formatPictureSize = pFormatPictureSize;}

void Parametre::setForme(Forme pForme)
{this->forme = pForme;}

void Parametre::setSizeBordure(int pSizeBordure)
{this->sizeBordure = pSizeBordure;}

void Parametre::setColorBordure(QColor pColorBordure)
{this->colorBordure = pColorBordure;}

//////////Getter////////////
TypeParam Parametre::getAutoParam()
{return this->paramAuto;}

QSize Parametre::getResultSize()
{return this->resultSize;}

int Parametre::getPictureSize()
{return this->pictureSize;}

int Parametre::getPictureQuantity()
{return this->pictureQuantity;}

bool Parametre::getAddAllPicture()
{return this->addAllPicture;}

int Parametre::getPictureDistance()
{return this->pictureDistance;}

int Parametre::getResultWidth()
{return this->resultSize.rwidth();}

int Parametre::getResultHeight()
{return this->resultSize.rheight();}

Format Parametre::getFormatResult()
{return this->formatResult;}

Format Parametre::getFormatPictureSize()
{return this->formatPictureSize;}

Forme Parametre::getForme()
{return this->forme;}

int Parametre::getSizeBordure()
{return this->sizeBordure;}

QColor Parametre::getColorBordure()
{return this->colorBordure;}
